if fr=1 then 'TITLE("Recherche des labels et des connecteurs...")'
else 'TITLE("Searching labels and connectors...")'
do i=1 to objets
'TYPE(O='i')'
if result=4 | result=12 | result=11 then do
'ABS(FINDLINE(1,COL(O),LINE(O)))'; j=result
if j>0 then do
net=equi.j
'READTEXT(O)'; label=result
label.net=label
end
end
end
if fr=1 then 'TITLE("Recherche des alimentations...")'
else 'TITLE("Searching powers...")'
do i=1 to objets
'FINDPART('i',"ALIMENTATION")'; i=result
if i>0 then do
j=connexion_broche(i,1)
if j>0 then do
net=equi.j
'READTEXT(GETVAL('i'))'; label=result
label.net=label
end
end
else leave
end
if fr=1 then 'TITLE("Test redondances...")'
else 'TITLE("Checking redundancies...")'
do i=1 to nets
do j=i+1 to nets
if label.j~="" then do
if label.i=label.j then do
do k=1 to objets
if equi.k=j then equi.k=i
end
label.j=""
end
end
end
end
if fr=1 then 'TITLE("Recherche des masses...")'
else 'TITLE("Searching grounds...")'
do i=1 to objets
'FINDPART('i',"MASSE")'; i=result
if i>0 then do
j=connexion_broche(i,1)
if j>0 then do
equi.0=0; label.0=0
call changer_labels(0,j)
end
end
else leave
end
masse=0
do i=0 to nets
if label.i=0 then do
masse=1
leave i
end
end
if masse=0 then do
if fr=1 then 'REQUEST("Attention: le circuit"+CHR(10)+"ne possède pas de masse!"+CHR(10)+"Sa simulation sera impossible"+CHR(10)+"Voulez-vous continuer?")'
else 'REQUEST("Warning: the circuitry"+CHR(10)+"has no ground line!"+CHR(10)+"Its simulation will be impossible"+CHR(10)+"Do-you want to continue?")'
if result<1 then exit
end
do until c=0
if fr=1 then 'TITLE("Établissement équipotentielles terminé"):SELECT("Choisissez une action"+CHR(10)+"Visualiser les équipotentielles"+CHR(10)+"Contrôler la netlist"+CHR(10)+"Sauver la netlist"+CHR(10)+"Abandonner ce script")'
else 'TITLE("Checking circuitry finished"):SELECT("Choose an action"+CHR(10)+"Display the nodes"+CHR(10)+"Check the netlist"+CHR(10)+"Save the netlist"+CHR(10)+"Stop this script")'
select
when result=1 then call visu_equi
when result=2 then call controler_netlist
when result=3 then call sauver_netlist
otherwise c=0
end
end
'UNMARK(-1):UNLOCK:INIT(O,OO,I,X,V0,V1,B)'
exit
visu_equi:
if fr=1 then 'TITLE("Vérification équipotentielles"):UNMARK(-1)'
else 'TITLE("Checking nodes"):UNMARK(-1)'
do i=0 to nets
if label.i ~= "LABEL_DÉJÀ_UTILISÉ" & label.i ~= "" then do
do j=1 to objets
if equi.j=i then 'MARK('j')'
end
if fr=1 then 'SELECT("Équipotentielle 'label.i'"+CHR(10)+"Abandonner"+CHR(10)+"Continuer"+CHR(10)+"Sauver netlist"+CHR(10)+"Contrôler netlist")'
if fr=1 then 'ASKNUM("Nombre de points 'v'?",100)'
else 'ASKNUM("Number of points 'v'?",100)'
f=f||result
if fr=1 then 'ASKTEXT("Quelle est la fréquence de début?","10")'
else 'ASKTEXT("Beginning frequency ?","10")'
f=f||" "||result
if fr=1 then 'ASKTEXT("Quelle est la fréquence de fin?","100")'
else 'ASKTEXT("Ending frequency ?","100")'
analyse="AC "||f||' '||result
end
when result=3 then do
if fr=1 then do
'UNMARK(-1):MESSAGE("Vous devez maintenant"+CHR(10)+"sélectionner une source")'
'PICKOBJ("Sélectionnez le générateur à faire varier.")'
end
else do
'UNMARK(-1):MESSAGE("Now you must"+CHR(10)+"select a source")'
'PICKOBJ("Select the generator to be swept.")'
end
f=result
if f<1 then return
'MARK('f'):TYPE('f')'
if result=5 then 'READTEXT('f')'
else 'READTEXT(GETREF('f'))'
f=result
if fr=1 then 'V0=ASKTEXT("Quelle est la valeur de départ?","V")'
else 'V0=ASKTEXT("Beginning value ?","V")'
f=f||' '||result
if fr=1 then 'V1=ASKTEXT("Quelle est la valeur finale ?","V")'
else 'V1=ASKTEXT("Ending value ?","V")'
f=f||' '||result
if fr=1 then 'ASKTEXT("Quel est l''incrément?",STR((VAL(V1)-VAL(V0))/100)+"V")'
else 'ASKTEXT("Increment value ?",STR((VAL(V1)-VAL(V0))/100)+"V")'
analyse="DC "||f||' '||result
end
when result=4 then do
if fr=1 then do
'ASKTEXT("Temps de simulation?","s")'; temps=result
'ASKTEXT("Pas de simulation?","s")'; pas=result
'ASKTEXT("Temps de début de la simulation?","s")'; d=result
end
else do
'ASKTEXT("Time of simulation?","s")'; temps=result
'ASKTEXT("Simulation step ?","s")'; pas=result
'ASKTEXT("Time delay before simulation ?","s")'; d=result
end
analyse="tran "||pas||" "||temps||" "||d
end
otherwise
return
end
end
if analyse~="" then writeln(file,"."||analyse)
i=1
s=''
do i=1 to objets
'FINDOBJ('i',TEXTE,-1,-1)'; i=result
if i>0 then do
'READTEXT('i')'; t=result
if left(t,9)=".OUTPUT: " then do
s=substr(t,9)
end
end
else leave
end
if s='' then do
if fr=1 then 'UNMARK(-1):MESSAGE("Vous pouvez maintenant"+CHR(10)+"spécifier quels sont les"+CHR(10)+"signaux à visualiser"+CHR(10)+"Appuyez sur le bouton"+CHR(10)+"droit pour arrêter")'
else 'UNMARK(-1):MESSAGE("Now you can specify"+CHR(10)+"what labels are to be displayed"+CHR(10)+"Click on the right button"+CHR(10)+"to stop.")'
i=1
do while i>0
if fr=1 then 'PICKOBJ("Sélectionnez un signal (label ou liaison)")'
else 'PICKOBJ("Select a label (or a wire)")'
i=result
if i>0 then do
'MARK('i'):TYPE('i')'; t=result
if t=2 then do
lab=equi.i
lab=label.lab
end
else do
'READTEXT('i')'
lab=result
end
if i>0 then s=s||' '||'V('||lab||')'
end
end
end
if s~='' then writeln(file,".save"||s)
writeln(file,".END")
close(file)
if fr=1 then 'TITLE(""):REQUEST("Sauvegarde terminée"+CHR(10)+"Voulez-vous effectuer"+CHR(10)+"la simulation?")'
else 'TITLE(""):REQUEST("Saving finished"+CHR(10)+"Do you want to run"+CHR(10)+"the simulation ?")'
/* Traitement des erreurs, interruption du programme */
syntax:
erreur=RC
if fr=1 then 'MESSAGE("Script SaveNets.AmiCAD"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK:INIT(O,OO,I,X,V0,V1,B)'
else 'MESSAGE("SaveNets.AmiCAD script"+CHR(10)+"Syntax error"+CHR(10)+"in line 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK:INIT(O,OO,I,X,V0,V1,B)'
exit
error:
if fr=1 then 'MESSAGE("Script SaveNets.AmiCAD"+CHR(10)+"Erreur en ligne 'SIGL'"):UNLOCK:INIT(O,OO,I,X,V0,V1,B)'
else 'MESSAGE("SaveNets.AmiCAD script"+CHR(10)+"Error in line 'SIGL'"):UNLOCK:INIT(O,OO,I,X,V0,V1,B)'